热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

检测器|小时_前沿科技探究之AI工具:Anomalydetection

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前沿科技探究之AI工具:Anomaly-detection相关的知识,希望对你有一定的参考价值。概述

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前沿科技探究之AI工具:Anomaly-detection相关的知识,希望对你有一定的参考价值。



概述

anomaly_detection是openGauss集成的、可以用于数据库指标采集、预测指标趋势变化、慢SQL根因分析以及异常监控与诊断的AI工具,是DBMind套间中的一个组件。支持采集的信息分为三块,分别是os_exporter、database_exporter、wdr,os_exporter主要包括IO_Read、IO_Write、IO_Wait、CPU_Usage、Memory_Usage、数据库数据目录磁盘空间占用Disk_space;database_exporter主要包括QPS、部分关键GUC参数(work_mem、shared_buffers、max_connections)、数据库临时文件、外部进程情况、外部连接数;wdr包括慢SQL文本、SQL开始执行时间、SQL结束执行时间相关信息。在异常监控方面,anomaly_detection可以同时对IO_Read、IO_Write、IO_Wait、CPU_Usage、Memory_Usage和Disk_Space多个指标的未来变化趋势进行预测,当发现某个指标在未来某段时间或者某个时刻会超出人工设置的阈值,该工具会通过日志进行报警。在慢SQL根因分析方面,工具会定期从WDR报告中拉取慢SQL信息,并对慢SQL的根因进行诊断,最后将诊断结果存放到日志文件中,同时该工具还支持用户交互式慢SQL诊断,即对用户输入的慢SQL进行根因分析,并将结果反馈给用户。

anomaly_detection由agent和detector两大模块组成。agent和openGauss数据库环境部署在同一个服务器上,该模块主要有两个作用。一个是定时采集数据库指标数据,并将采集到的数据存放到缓冲队列中;另一个作用是将缓冲队列中数据定时发送到detector的collector子模块中。

detector模块由collector模块和monitor模块组成,collector模块和agent模块通过http或https进行通信,接受agent模块push的数据并存储到本地。monitor模块基于本地数据对指标的未来变化趋势进行预测和异常报警,另外结合系统和WDR报告等各种相关联信息,分析慢SQL的根因。


使用准备

前提条件与使用事项


  • 数据库状态正常。
  • 工具运行过程中,如果系统时间被篡改,可能会造成慢SQL数据采集失效。
  • 工具不支持在备节点上采集。
  • 使用登录到数据库宿主机上的Linux用户,需要将$GAUSSHOME/bin添加到PATH环境变量中,即能够直接运行gsql、gs_guc、gs_ctl等数据库运维工具。
  • Python版本建议为Python3.6及以上,且运行环境中已经安装相应依赖,并能够正常启动调优程序。
  • 本工具由Agent和Detector组成,Agent和Detector之间通过’http’或者’https’方式传递数据,因此需要保证Agent服务器和Detector服务器之间能够正常通信。
  • Detector模块运行collector和monitor服务, 需要分别启动。
  • 如果使用’https’方式进行通信,需要准备CA证书以及Agent和Detector的证书和密钥,并分别放入项目根目录certificate下的ca、agent、collector中,同时将密钥加密密码放入certificate的pwf中,并将其权限设置为600,防止其他用户进行读写操作。用户也可以使用share中的脚本生成证书和密钥。
  • 建议用户配置自己的python环境,以免影响其他功能使用(例如使用miniconda)。
  • 慢SQL的根因分析功能需要WDR报告,用户需要开启track_stmt_stat_level=‘OFF,L1’, log_min_duration_statement=3000(慢SQL阈值,用户可按需设定),单位ms。
  • 如果将detecor和数据库部署在同一服务器上,则collector服务端口不能和数据库本地端口相同,否则将无法启动进程。

原理简介

图1 anomaly_detection结构图
anomaly_detection是一个独立于数据库内核之外的工具,其结构如图1所示,anomaly_detection主要由agent和detector模块组成;


  • agent:数据代理模块,由Source、Channel以及Sink组成。部署在数据库环境上,用于采集数据库中的指标,并通过http或者https方式将其传送给远端检测器模块。
  • detector:检测器模块,负责收集Agent推送的数据并存储,同时该模块基于时序预测和异常检测等算法对数据库指标进行监控和异常检测,同时提供慢SQL根因服务功能。

anomaly_detection的运行和安装方法

1、切换到anomaly_detection目录下。对于openGauss社区代码来说,该路径在openGauss-server/src/gausskernel/dbmind/tools/anomaly_detection。对于已经安装的数据库系统,则该源代码路径为 $GAUSSHOME/bin/dbmind/anomaly_detection。
2、 在当前目录下可以看到 requirements.txt 等文件,通过pip包管理工具根据该 requirements.txt 文件安装依赖:

pip install -r requirements.txt

3、 安装成功后可执行main.py。以获取帮助信息为例,则可以执行:

python main.py --help # 可以直接通过该命令执行获取帮助的动作,其他功能使用方法类似

证书生成

证书生成当使用https方式进行通信时,需要用户提供证书,anomaly_detection也提供了证书生成工具。

生成CA根证书,在anomaly_detection的share目录下,执行以下命令:

sh gen_ca_certificate.sh

该脚本会在anomaly_detection根目录下创建certificate目录,其中包括ca、server、agent三个子目录,ca中存放根证书ca.crt和密钥文件ca.key。

生成server端证书和密钥文件,在anomaly_detection的share目录下,执行以下命令:

sh gen_certificate.sh

# please input the basename of ssl certificate: ../certificate/server

# please input the filename of ssl certificate: server

# please input the local host: 127.0.0.1

# please input the password of ca and ssl separated by space:

该脚本需要用户分别输入生成证书与密钥文件存放目录、证书与密钥文件名称、detector端服务器IP地址、ca证书密码和当前证书密码(用空格分开)。脚本最后会在certificate的server下生成server.crt和server.key。

1、生成agent端证书密钥和文件,在anomaly_detection的share目录下,执行以下命令:

sh gen_certificate.sh

# please input the basename of ssl certificate: ../certificate/agent

# please input the filename of ssl certificate: agent

# please input the local host: 127.0.0.1

# please input the password of ca and ssl separated by space:

该脚本需要用户分别输入生成证书与密钥文件存放目录、证书与密钥文件名称、agent端服务器IP地址、ca证书密码和当前证书密码(用空格分开)。脚本最后会在certificate的agent下生成agent.crt和agent.key。


anomaly_detection的配置文件说明

anomaly_detection 在运行前需要加载a-detection.conf和metric_task.conf两个配置文件,可以通过 python main.py –help 命令查看配置文件路径:

a-detection.conf:该配置文件包含agent、server、database、security、forecast、log六个section,参数解释如下:

[database]
storage_duration = 12H # 数据存储时间长度,默认12小时
database_dir = ./data # 数据存储目录
[security]
tls = False
ca = ./certificate/ca/ca.crt
server_cert = ./certificate/server/server.crt
server_key = ./certificate/server/server.key
agent_cert = ./certificate/agent/agent.crt
agent_key = ./certificate/agent/agent.key
[server]
host = 0.0.0.0 # 服务端IP地址
listen_host = 0.0.0.0
listen_port = 8080
white_host = 0.0.0.0 # IP白名单
white_port = 8000 # 端口号白名单
[agent]
source_timer_interval = 10S # agent端数据采集频率
sink_timer_interval = 10S # agent端数据发送频率
channel_capacity = 1000 # 缓冲队列最大长度
db_host = 0.0.0.0 # agent节点IP地址
db_port = 8080 # agent节点端口号
db_type = single # agent节点类型, single: 单机,cn: CN节点、dn: DN节点
[forecast]
forecast_alg = auto_arima # 时序预测算法,auto_arima、fbprophet(需要用户自行安装)
[log]
log_dir = ./log # 日志文件位置

metric_task.conf: 该配置文件包括detector method, os_expoeterhe trend_parameter三个sections,参数结束如下:

[detector_method]
trend = os_exporter # 用于时序预测的表名
slow_sql = wdr # 用户慢SQL诊断的表名
[os_exporter]
cpu_usage_minimum = 1 # cpu_usage的下限值
cpu_usage_maximum = 10 # cpu_usage的上限值
memory_usage_minimum = 1 # memory_usage的下限值
memory_usage_maximum = 10 # memory_usage的上限值
io_read_minimum = 1
io_read_maximum = 10
io_write_minimum = 1
io_write_maximum = 10
io_wait_minimum = 1
io_wait_maximum = 10
disk_space_minimum = 1
disk_space_maximum = 10
[common_parameter]
data_period = 1000S # 是用于时序预测的历史数据长度,支持整数加时间单位(如:100S、2M、10D)。
interval = 20S # 监控间隔
freq = 3S # 趋势预测频率
period = 2 # 趋势预测长度

说明: - 支持的时间单位:


  • ‘S’:second,秒。
  • ‘M’:minute,分。
  • ‘H’:hour,小时。
  • ‘D’:day,天。
  • ‘W’:week,周。
  • minimum和maximum至少提供一个,不能都不提供。
  • freq和period共同决定时序预测结果,例子:freq=2S,period=5, 则会预测未来2S、4S、6S、8S、10S的值。
  • 建议参数配置的时候,保证训练数据长度大于预测长度,否则预测效果会受影响。

添加监控参数

工具只针对os_exporter中的指标进行趋势预测与阈值异常检测,支持用户添加新的监控参数,步骤如下:

1、在task/os_exporter.py的OS_exporter中编写获取指标的功能函数,并将该函数加入到output的result列表中,例如:

@staticmethod
def new_metric():
return metric_value

def output(self):
result = [self.cpu_usage(), self.io_wait(), self.io_read(),
self.io_write(), self.memory_usage(), self.disk_space(), self.new_metric()]
return result

2、在table.json的os_exporter中,将new_metric字段加入到“create table“中,并在“insert”中加上字段类型信息,例如:

"os_exporter":
"create_table": "create table os_exporter(timestamp bigint, cpu_usage text, io_wait text, io_read text, io_write text, memory_usage text, disk_space text, new_metric text);",
"insert": "insert into os_exporter values(%d, \\"%s\\", \\"%s\\", \\"%s\\", \\"%s\\", \\"%s\\", \\"%s\\", \\"%s\\");",

3、在task/metric_task.conf中添加指标的上限值或者下限值,例如:

[os_exporter]
new_metric_minimum = 0
new_metric_maximum = 10

获取帮助

启动调优程序之前,可以通过如下命令获取帮助信息:

源码方式:python main.py --help

输出帮助信息结果如下:

usage:
python main.py start [--role agent,collector,monitor] # start local service.
python main.py stop [--role agent,collector,monitor] # stop local service.
python main.py start [--user USER] [--host HOST] [--project-path PROJECT_PATH] [--role agent,collector,monitor]
# start the remote service.
python main.py stop [--user USER] [--host HOST] [--project-path PROJECT_PATH] [--role agent,collector,
monitor] # stop the remote service.
python main.py deploy [--user USER] [--host HOST] [--project-path PROJECT_PATH] # deploy project in remote host.
python main.py diagnosis [--query] [--start_time] [--finish_time] # rca for slow SQL.
python main.py show_metrics # display all monitored metrics(can only be executed on 'detector' machine).
python main.py forecast [--metric-name METRIC_NAME] [--period] [--freq]
[--forecast-method auto_arima, fbprophet] [--save-path SAVE_PATH] # forecast future trend of
metric(can only be executed on 'detector' machine).
Anomaly-detection: a time series forecast and anomaly detection tool.
positional arguments:
start,stop,deploy,show_metrics,forecast,diagnosis
optional arguments:
-h, --help show this help message and exit
--user USER User of remote server.
--host HOST IP of remote server.
--project-path PROJECT_PATH
Project location in remote server.
--role agent,collector,monitor
Run as 'agent', 'collector', 'monitor'. Notes: ensure
the normal operation of the openGauss in agent.
--metric-name METRIC_NAME
Metric name to be predicted, you must provide an specified metric name.
.
--query QUERY target sql for RCA.
Currently, the join operator is not supported, and the accuracy of the result
is not guaranteed for SQL syntax containing "not null and".
--start_time START_TIME
start time of query
--finish_time FINISH_TIME
finish time of query
--period PERIOD Forecast periods of metric, it should be integernotes:
the specific value should be determined to the
trainnig data.if this parameter is not provided, the
default value '100S' will be used.
--freq FREQ forecast gap, time unit: S: Second, M: Minute, H:
Hour, D: Day, W: Week.
--forecast-method FORECAST_METHOD
Forecast method, default method is 'auto_arima',if
want to use 'fbprophet', you should install fbprophet
first.
--save-path SAVE_PATH
Save the results to this path using csv format, if
this parameter is not provided,, the result wil not be
saved.
-v, --version show program's version number and exit
epilog:
the 'a-detection.conf' and 'metric_task.conf' will be read when the program is running,
the location of them is:
a-detection.conf: /openGauss-server/src/gausskernel/dbmind/tools/anomaly_detection/a-detection.conf.
metric_config: /openGauss-server/src/gausskernel/dbmind/tools/anomaly_detection/task/metric_task.conf.

使用示例

为了方便用户理解部署过程,假设当前数据库节点信息如下:

IP: 10.90.110.130
PORT: 8000
type: single

detector服务器信息:

IP: 10.90.110.131
listen_host = 0.0.0.0
listen_port = 8080

部署的启动流程如下:


配置文件修改

首先需要更改配置文件 a-detection.conf,主要涉及其中的两个session:

[database]
storage_duration = 12H # 数据存储时间长度,默认12小时
database_dir = ./data # 数据存储目录
[security]
tls = False
ca = ./certificate/ca/ca.crt
server_cert = ./certificate/server/server.crt
server_key = ./certificate/server/server.key
agent_cert = ./certificate/agent/agent.crt
agent_key = ./certificate/agent/agent.key
[server]
host = 10.90.110.131
listen_host = 0.0.0.0
listen_port = 8080
white_host = 10.90.110.130
white_port = 8000
[agent]
source_timer_interval = 10S
sink_timer_interval = 10S
channel_capacity = 1000
db_host = 10.90.110.130
db_port = 8080
db_type = single
[forecast]
forecast_alg = auto_arima
[log]
log_dir = ./log

服务启动与停止

启动本地agent服务:

python main.py start --role agent

停止本地agent服务:

python main.py stop --role agent

启动本地collector服务:

python main.py start --role collector

停止本地collector服务:

python main.py stop --role collector

启动本地monitor服务:

python main.py start --role monitor

停止本地monitor服务:

python main.py stop --role monitor

命令参考

表 1 命令行参数


参数参数说明取值范围
mode指定运行模式start,stop,forecast,show_metrics,deploy,diagnosis
–user远程服务器用户-
–host远程服务器IP-
–project-path远程服务器anomaly_detection项目路径-
–role启动角色选择agent,collector,monitor
–metric-name指标名称-
–query根因分析RCA目标query-
–start_timequery执行的开始时间-
–finish_timequery执行的结束时间-
–forecast-periods未来预测周期整数,具体值应该根据training数据决定。如果未提供此参数,则将使用默认值“100S”。
–freq FREQ预测间隔时间单位,包括(S(second),M(minute),H(hour),D(day),W(week))。
–forecast-method预测方法auto_arima, fbprophet
–save-path预测结果存放地址-
–version, -v返回当前工具版本号-

AI_SERVER

ai_server为anomaly_detection特性的分离特性,在原anomaly_detection数据采集功能的基础上增加了采集类型、采集项、数据存储模式,仅用于数据采集,后续将整合到anomaly_detection中,该特性主要包含server组件和agent组件,agent须部署到数据库节点,用于数据采集,server部署在独立节点进行数据收集存储。

数据存储方式包括:sqlite、mongodb、influxdb。

采集项如表1:

表 1 采集项说明
采集类型:database


采集项描述
work_mem数据库内存相关GUC参数,对涉及到排序任务的sql,检测分配的空间是否足够。
shared_buffers数据库内存相关GUC参数,不合适的shared_buffer会导致数据库性能变差。
max_connections
数据库最大连接数。
current connections数据库当前连接数。
qps数据库性能指标。

采集类型:OS


采集项描述
cpu usagecpu使用率。
memory usage内存使用率。
io wait系统因为io导致的进程wait。
io write数据磁盘写吞吐量。
io read数据磁盘读吞吐量。
disk used磁盘已使用的大小。

AI_MANAGER

ai_manager是AI特性部署工具,旨在为ai特性提供自动化、高效便捷的部署及卸载方式,可通过指定模块名称、操作类型及参数文件进行相应ai特性的自动化部署和卸载,实现了版本管理、操作日志记录及日志管理、安装信息记录等功能,支持特性级横向扩展,该工具目前仅支持ai_server的安装及卸载。


使用准备


  • 项目部署路径为/dbs/AI-tools,需保证该路径存在并有读写执行权限,安装/卸载操作中会清理该路径下的内容,不要将其它文件保存在该路径下。
  • 需要安装python3环境及特性所需python库,依赖库请参考包内的requirements.txt文件。
  • 如开启https,需准备相应的根证书,秘钥文件及密码。
  • agent节点已启动GaussDB Kernel数据库。
  • 安装agent节点须使用集群用户操作。
  • 如果agent节点集群用户的~/.bashrc文件中没有正确的PGHOST配置,需要将PGHOST配置到/dbs/AI-tools/ai_env文件中。

示例

安装命令示例:

python3 ai_manager --module anomaly_detection --action install --param_file opengauss.json

卸载命令示例:

python3 ai_manager --module anomaly_detection--action uninstall --param_file opengauss.json

参数文件示例:


"scene": "opengauss", # 场景,openGauss安装server及agent,huaweiyun仅安装server
"module": "anomaly_detection", # 模块(特性)名称,目前仅支持anomaly_detection
"action": "install", # 操作类型,支持install及uninstall
"ca_info":
"ca_cert_path": "/home/Ruby/CA_AI/ca.crt", # 根证书路径
"ca_key_path": "/home/Ruby/CA_AI/ca.crt.key", # 根证书秘钥路径
"ca_password": "GHJAyusa241~" # 根证书密码
,
"agent_nodes": [

"node_ip": "10.000.00.000", # agent节点IP
"username": "Ruby", # agent节点用户
"password": "password" # agent节点密码

],
"config_info":
"server":
"host": "10.000.00.000", # server部署节点IP(执行节点)
"listen_host": "0.0.0.0", # server 监听IP
"listen_port": "20060", # server 监听端口
"pull_kafka": "False" # 是否拉取kafka数据,暂不支持拉取。
,
"database":
"name": "sqlite", # 数据存储方式,支持sqlite、mongodb、influxdb
"host": "127.0.0.1", # 数据库ip
"port": "2937", # 数据库端口
"user": "Ruby", # 数据库用户
"size": "175000000", # mongodb 最大存储容量
"max_rows": "1000000" # mongodb 最大存储条数
,
"agent":
"cluster_name": "my_cluster", # 采集数据库的名称
"collection_type": "os", # 采集类型,支持os、database、all
"collection_item": [["dn", "10.000.00.000", "33700"]], # agent节点采集数据类型(dn/cn),采集节点IP,端口
"channel_capacity": "1000", # 队列容量
"source_timer_interval": "5S", # 采集间隔
"sink_timer_interval": "5S" # 发送间隔
,
"security":
"tls": "True" # 是否开启https



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
author-avatar
mobiledu2502924027
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有